1636 PRINT "FIRST VISIBLE PARAMETER?";: GOSUB 690:B$ = YN$: IF B$ = CHR$(13) THEN 1602
1637 IF B$ <"B" THEN B$ = "B"
1638 IF B$ > CHR$(65 +OP) THEN B$ = CHR$(65 +OP)
1639 SP = ASC(B$) -64: GOTO 1602
1640 IF NOT TY(A -1) THEN 1650
1645 GOSUB 690: IF YN$ = CHR$(13) THEN 1602
1648 OP(A -1) = (YN$ = "Y" OR YN$ = "T" OR YN$ = "1"): GOTO 1602
1650 INPUT " ";YN$: IF YN$ = "" THEN 1602
1655 OP(A -1) = VAL(YN$): GOTO 1602
1660 INPUT "DATE?";B$: IF B$ < >"" THEN DY$ = B$
1670 GOTO 1602
1680 TB = 0:OP(18) = 0: IF NOT OP(5) THEN 1686
1682 TB = OP(2): IF TB >50 THEN TB = 50
1683 IF TB <1 THEN TB = 1
1684 IF OP(11) <1 THEN OP(11) = 1
1685 IF OP(11) >100 THEN OP(11) = 100
1686 IF OP(4) <0 THEN OP(4) = 0
1687 IF OP(4) >120 THEN OP(4) = 50
1689 RETURN
1700 EP = 1:SP = 0: GOSUB 7620:IX = TB +4 - LEN( STR$(X)): IF IX <0 THEN IX = 0
1702 GOSUB 595: PRINT SPC( IX)X SPC( 2);:IX = IX + LEN( STR$(X)) +2:KK = 1: FOR JJ = 1 TO LEN(NE$(W)): IF MID$ (NE$(W),JJ,1) = Q$(5) THEN E(KK) = JJ:KK = KK +1: IF KK >3 THEN JJ = 255
1705 NEXT :E(0) = 0:X6 = KK -1:ID = IX:X5 = 2: IF OP(10) THEN X5 = 1
4510 C$ = "LOADED FROM": IF C2 = 2 THEN C$ = "READ FROM"
4520 IF C2 = 4 THEN C$ = "SAVED TO"
4540 GOSUB 5100: IF CZ THEN RETURN
4550 GOSUB 4800: IF CZ THEN RETURN
4560 ON C2 -1 GOSUB 1800,4600,2100: RETURN
4600 ONERR GOTO 4700
4610 GOSUB 4850:Z = 0:X = 0: INPUT LO: INPUT FL: INPUT MM: IF LO <1 THEN 4690
4612 IF (MM = 1 AND OP(8)) OR (MM = 2 AND NOT OP(7)) THEN PRINT "PARAMETER SETTINGS REQUIRE READING YOUR";: GOSUB 860: PRINT "DATA DISKS TO GET THE NAME PARTS.": PRINT "THIS FEATURE IS NOT NOW AVAILABLE.": FOR I = 1 TO 2000: NEXT :Z = Z +1: GOTO 4690
4615 X = X +1:Z = Z +1: IF X >LO THEN 4690
4620 IF Z > = SZ THEN 4680
4625 INPUT SV(Z): CALL LI:NE$(Z) = MID$ (T$,1):NB(Z) = Z
4627 ON MM +1 GOTO 4630,4665,4650
4630 IF NOT OP(8) OR OP(7) THEN GOSUB 800
4635 GOTO 4665
4650 IF NOT OP(8) THEN W = Z: GOSUB 100: IF N3$ < >"" THEN Z = Z -1
4665 IF Z = 10 * INT(Z/10) THEN GOSUB 670: IF CZ THEN Z = Z +1: GOTO 4690
4670 GOTO 4615
4680 PRINT "LIST TOO BIG FOR MEMORY. ONLY "X -1" OUT";: GOSUB 860: PRINT "OF "LO" NAMES WILL BE STORED.": FOR I = 1 TO 2000: NEXT
4690 LO = Z -1: PRINT CHR$(4)"CLOSE": POKE 216,0: RETURN
4700 POKE 216,0: PRINT CHR$(4)"CLOSE"CP$:A = PEEK(222): IF A < >5 THEN 2180
4710 PRINT : PRINT "FILE NOT FOUND. PROBABLY MISSPELLED.": GOSUB 4800: IF CZ THEN 20000
4715 GOSUB 4850: ONERR GOTO 4700
4720 RESUME
4800 PRINT : PRINT "WHAT IS THE NAME OF FILE ON THE DIS";: GOSUB 865: PRINT "KETTE THE LIST WILL BE "C$;: INPUT CP$: IF CP$ = CZ$ THEN CZ = 1: RETURN
4810 IF CP$ = "" THEN X6 = DR: GOSUB 4870: GOTO 4800
4820 GOSUB 5200: IF A >0 THEN PRINT : PRINT "ILLEGAL NAME": GOTO 4800
4930 BD = OP(22): IF BD <15 +TB THEN BD = INT(.7 *(FC -TB)) +TB
4935 ED = FC: IF SF >0 THEN ED = BD
4940 RETURN
5000 IF Q(44) <1 THEN RETURN
5005 FOR I = 12 TO Q(44) +11:DF(I -11) = VAL( MID$ (Q$(I), LEN(Q$(I)) -1,1)) +1: IF LEN(Q$(I)) >2 THEN Q$(I) = LEFT$(Q$(I), LEN(Q$(I)) -2): GOTO 5010
5007 Q$(I) = ""
5010 NEXT : RETURN
5100 DD = 0: IF Q(8) <2 THEN DD = 1: GOTO 5150
5101 PRINT : PRINT "DETERMINING THE DRIVE THE LIST IS TO BE";: GOSUB 860: PRINT C$":"
5102 FOR I = 1 TO MP: IF WH(I,0) = -1 THEN DD = I
5105 NEXT : IF DD = 0 THEN 5120
5110 PRINT : PRINT "USE DRIVE "WH(DD,1)" (Y/N)?";: GOSUB 690: IF YN$ = CZ$ THEN CZ = 1: RETURN
5115 IF YN$ < >"N" THEN DR = DD: RETURN
5120 PRINT : PRINT "USE WHICH DISK DRIVE (1-"Q(8);: INPUT ")?";YN$: IF YN$ = CZ$ THEN CZ = 1: RETURN
5125 IF YN$ < >"" THEN 5140
5130 FOR I = 1 TO Q(8): IF WH(I,0) <0 AND ME(WH(I,1),1) > = 0 THEN DD = I
5135 NEXT : IF DD <1 THEN DD = 1
5138 GOTO 5150
5140 DD = VAL(YN$): IF DD <1 OR DD >Q(8) THEN 5110
5150 GOSUB 3400: IF DR = 0 THEN PRINT : PRINT "NO SCRATCH DISK OR DIRECTORY AVAILABLE.";: GOSUB 860: PRINT "PLEASE TRY AGAIN..": FOR I = 1 TO 3000: NEXT : GOTO 5100
5160 RETURN
5200 A = 0: IF CP$ <"/" THEN A = 1: RETURN
5205 FOR I = 1 TO LEN(CP$):A$ = MID$ (CP$,I,1): IF (A$ <"A" OR A$ >"Z") AND (A$ <"a" OR A$ >"z") AND (A$ <"0" OR A$ >"9") AND A$ < >"." AND A$ < >"/" THEN A = 1:I = 255
5210 NEXT : RETURN
5500 GOSUB 850: IF C1 = 3 AND C2 = 5 THEN RETURN
5505 IF LO = 0 THEN PRINT "NOTHING IN MEMORY": FOR I = 1 TO 2000: NEXT : RETURN
5510 GOSUB 5600:X2 = 0:X7 = 0: GOSUB 2000: GOSUB 6700: FOR X1 = 1 TO LO:X2 = X2 +1:X7 = X7 +1:I = X1: IF C1 = 1 OR (C1 = 3 AND FL) THEN I = NB(X1)
5520 X = SV(I):W = I: GOSUB 1700: GOSUB 5700: NEXT : GOSUB 5545: RETURN
5545 IF OP(1) AND OP(5) THEN GOSUB 5800
5550 IF OP(5) THEN GOSUB 600:IQ = 0:JR = 0
5555 IF NOT OP(5) THEN GOSUB 695: SPEED= 255
5570 RETURN
5600 IF NOT OP(5) THEN SPEED= INT(2.55 *OP(11))
5605 RETURN
5650 IF OP(5) THEN GOSUB 850: PRINT "PLEASE READY THE PRINTER"
5655 IF OP(5) THEN GOSUB 580:IQ = 1:JR = 1: IF Q(47) THEN GOSUB 595: PRINT :X2 = X2 +1: GOSUB 608
5660 RETURN
5700 IF NOT OP(5) THEN RETURN
5705 IF X2 <OP(16) OR OP(16) = 0 OR (X1 = LO AND C1 < >3 AND C2 < >1) THEN RETURN
5710 IF OP(15) >0 THEN IF (OP(15) <9 AND INT(X7/OP(15)) *OP(15) < >X7) THEN RETURN
5720 GOSUB 5800: GOSUB 6700:X7 = 0: RETURN
5800 IF NOT IQ THEN RETURN
5805 GOSUB 595: IF Q(63) THEN FOR I = 1 TO Q(48) -X2: PRINT : NEXT : GOTO 5820
5810 PRINT CHR$(12)
5820 GOSUB 608: IF Q(64) THEN GOSUB 690
5830 X2 = 0: RETURN
6000 DIM G$(Q(18)),E(3),H$(6),H1$(6),H2$(6),RC$(Q(44) +11),DF(Q(44)),MT$(12),ME(Q(8),3),ME$(Q(8)),WH(Q(31),4),WH$(Q(31))
6530 PRINT : PRINT "DO YOU WANT TO SET ANY PARAMETERS";: GOSUB 860: PRINT "BEFORE STARTING (Y/N)?";: GOSUB 690: POKE 34,0: IF YN$ = "Y" OR YN$ = "P" THEN GOSUB 1600
6540 RETURN
6560 GOSUB 850: PRINT "YOUR HEADER IS:": PRINT : FOR X5 = 1 TO HL: PRINT "LINE " CHR$(64 +X5)": ";:IX = 7: GOSUB 6610: NEXT : RETURN
6600 IF HL = 0 THEN RETURN
6605 GOSUB 595: FOR X5 = 1 TO HL: PRINT SPC( OP(4))V3$;:IX = OP(4):X2 = X2 +1: GOSUB 6610: NEXT : GOSUB 608: RETURN
6610 IF G$(X5) = "*" THEN PRINT DY$: RETURN
6620 IF LEN(G$(X5)) +IX < = FC THEN PRINT G$(X5): RETURN
6630 J = 0: FOR I = FC -IX TO 1 STEP -1: IF MID$ (G$(X5),I,1) = " " OR MID$ (G$(X5),I,1) = "-" THEN J = I:I = 1
6635 NEXT : IF J AND J < LEN(G$(X5)) THEN PRINT LEFT$(G$(X5),J): PRINT SPC( IX +2) RIGHT$(G$(X5), LEN(G$(X5)) -J):X2 = X2 +1: RETURN
6640 PRINT G$(X5): RETURN
6700 PG = PG +1: GOSUB 595: PRINT : PRINT SPC( TB)"RECORD";: IF OP(16) >0 AND OP(23) >0 THEN A = FC -TB -12 - LEN( STR$(PG)): IF A > = 0 THEN PRINT SPC( A)"PAGE "PG;
6705 PRINT : PRINT SPC( TB)"NUMBER" SPC( 3)"NAME";:IX = TB +13: IF SF >0 AND FC -BD >0 AND IX < = BD THEN PRINT SPC( BD -IX) LEFT$(BB$,FC -BD);:IX = FC: IF LEN(BB$) <FC -BD THEN IX = BD + LEN(BB$)
6710 PRINT : PRINT :X2 = X2 +4: GOSUB 608: RETURN
6760 GOSUB 850: PRINT : PRINT "A) RUN A DIFFERENT PROGRAM": PRINT "B) CHECK FREE SPACE": PRINT "C) RETURN TO 'LISTS'": PRINT "D) END SESSION"
6762 PRINT : INVERSE : PRINT "CHOICE (A-D)?";: GOSUB 690: IF YN$ = CHR$(13) THEN GOTO 6780
6763 C1 = ASC(YN$) -64: IF C1 <1 OR C1 >4 THEN 6762
6764 IF C1 = 4 THEN GOSUB 850: PRINT Q$(21): PRINT "BYE...": END
8400 MP = 0:MQ = 0: FOR I = 1 TO Q(8):ME(I,0) = Q(75 +I):ME$(I) = Q$(40 +I): FOR J = 2 TO 3:ME(I,J) = Q(47 +J +(I -1) *2): NEXT : NEXT :A$ = STR$(Q(67))
8405 IF LEN(A$) <Q(8) THEN A$ = "0" +A$: GOTO 8405
8410 IF LEN(A$) >Q(8) THEN A$ = RIGHT$(A$,Q(8))
8415 FOR I = 1 TO Q(8):ME(I,1) = VAL( MID$ (A$,Q(8) -I +1,1)) -1: NEXT
8420 RETURN
8650 IF IQ THEN GOSUB 605
8655 FF = 0: IF ZF$ < >"" THEN PRINT CHR$(4)"CLOSE"ZF$
8660 RETURN
8700 IF NOT OP(19) THEN SF = 0: RETURN
8705 GOSUB 850: PRINT "WHICH FIELD DO YOU WANT ON THE LIST:": PRINT : FOR I = 1 TO 4: PRINT CHR$(64 +I)") "TI$(I): NEXT : IF Q(44) >0 THEN FOR I = 5 TO Q(44) +4: PRINT CHR$(64 +I)") "Q$(I +7): NEXT
8707 IF BB$ < >"" AND SF >0 THEN PRINT : PRINT "(NOW '"BB$"')"
8710 PRINT : INVERSE : PRINT "CHOICE (A-" CHR$(68 +Q(44))")?";: GOSUB 690: IF YN$ = CZ$ THEN SF = 0: RETURN
8712 IF YN$ = CHR$(13) THEN RETURN
8715 SF = ASC(YN$) -64: IF SF <1 OR SF >4 +Q(44) THEN SF = 0: GOTO 8710
8720 IF SF >4 THEN IF DF(SF -4) = 3 THEN PRINT "USE OF A PERSON FIELD ISN'T ALLOWED":SF = 0: GOTO 8710
8730 IF SF >4 THEN SF = SF +7:BB$ = Q$(SF): RETURN
8740 BB$ = TI$(SF): RETURN
9000 DATA ???,"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
9010 DATA 5
9020 DATA MAKE ALPHABETIC LIST,MAKE NUMERIC ORDER LIST,MAKE SPECIAL LIST,CHANGE PROGRAM PARAMETERS,EXIT PROGRAM
9040 DATA 6
9060 DATA NUMBER RANGE,NUMBER LIST,NAME SET,SURNAME SOUNDEX,SURNAME PARTIALS,WHOLE DISK
9090 DATA 6
9095 DATA MERGE ALPHABETIC FILES,SHOW FILE FROM DISK,PUT DISK FILE INTO MEMORY,SAVE LIST TO DISK FILE,ALPHABETIZE MEMORY LIST,REPEAT A LIST
9100 DATA 24
9101 DATA TOP-OF-FORM AFTER PRINTS
9102 DATA SIZE OF LEFT MARGIN
9103 DATA USE CUSTOM HEADER
9104 DATA TAB BEFORE HEADER
9105 DATA SEND LIST TO PRINTER
9106 DATA SAVE MERGES ON DISK
9107 DATA USE MAIDEN NAME
9108 DATA USE MARRIED NAME
9109 DATA SHOW UNUSED
9110 DATA SHOW LAST NAME FIRST
9111 DATA SCREEN SPEED (1-100%)
9112 DATA ABLE TO ABORT ALPHA
9113 DATA SEARCH TITLE WITH SOUNDEX
9114 DATA IGNORE UPPER/LOWER CASE
9115 DATA NAMES PER GROUP
9116 DATA LINES PER PAGE
9117 DATA USE PREVIOUS HEADER
9118 DATA NOT USED
9119 DATA PRINT EXTRA FIELD
9120 DATA NOT USED
9121 DATA PRINT SIZE
9122 DATA COLUMN FOR EXTRA FIELD
9123 DATA FIRST SHEET NUMBER
9124 DATA USE MONTH NAMES
9150 DATA 1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,1,0,0,0,1
9200 DATA 0,1,2,3,0,1,2,0,0,0,2,4,5,5,0,1,2,6,2,3,0,1,0,2,0,2
9210 DATA 0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0
9220 DATA 9
9230 DATA 2,1,TH,2,5,NG,3,2,TIO,2,2,DG,3,0,IGH,3,3,GHT,2,1,GH,2,6,WR,2,5,GN
9250 DATA 4
9260 DATA BIRTH DATE,BIRTH PLACE,DEATH DATE,DEATH PLACE
9300 IF FL = 0 THEN GOSUB 9510: RETURN
9310 PRINT "LIST IN MEMORY IS ALREADY ALPHABETIC.": FOR I = 1 TO 2000: NEXT : RETURN
9400 FOR I = 1 TO Q(8): IF ME(I,1) = -2 THEN ME(I,1) = 0
9410 NEXT : RETURN
9500 IF C1 = 1 THEN GOSUB 9510
9505 RETURN
9510 GOSUB 850: IF LO = 0 THEN PRINT "NOTHING IN MEMORY": FOR I = 1 TO 2000: NEXT : RETURN
9515 GOSUB 850: GOSUB 7100: PRINT "SETTING UP ARRAYS"
9520 I = 1:II = LO: FOR J = 1 TO LO:NB(J) = J: NEXT : IF NOT OP(9) THEN II = LO: GOTO 9580
9530 IF LEN(NE$(NB(I))) >3 THEN 9560
9540 GOSUB 400:II = II -1: IF I > = II THEN 9570
9550 GOTO 9530
9560 I = I +1: IF I <II THEN 9530
9570 IF LEN(NE$(NB(II))) <4 THEN II = II -1
9580 NB = II: IF NB <2 THEN FL = 1: RETURN
9590 GOSUB 850: INVERSE : PRINT "ALPHABETIZING NAMELIST.": NORMAL
9600 DR = INT(.003 *NB ^1.5)/10
9610 PRINT : PRINT "THIS MAY TAKE "DR" MINUTES TO FINISH"
9620 VTAB Q(2) -7: PRINT "'BOX' IS ONE LESS THAN A POWER OF 2 AND";: GOSUB 860: PRINT "DECREMENTS. PROCESSING IS DONE WHEN IT": PRINT "IS FINISHED WITH BOX=1. BOX=1 USES ";: GOSUB 860: PRINT "ABOUT 1/3 OF THE TOTAL TIME."
9630 GOSUB 410: RETURN
12500 DY$ = "":A = PEEK(49040):N = PEEK(49041): IF A +N = 0 THEN DY$ = Q$(3): RETURN
12510 K = INT(N/2):I = A - INT(A/32) *32:J = (N -K *2) *8 + INT(A/32): IF J <1 OR J >12 THEN J = 0
16180 FOR X = 1 TO H1: PRINT CHR$(64 +X)") "H1$(X): NEXT : PRINT
16200 INVERSE : PRINT "CHOICE (A-" CHR$(64 +H1)"/P)?";: GOSUB 690: IF YN$ = CHR$(13) THEN RETURN
16202 IF YN$ = "P" THEN GOSUB 1600: GOSUB 850: GOTO 16170
16205 C3 = ASC(YN$) -64: IF C3 <1 OR C3 >H1 THEN 16200
16210 PRINT :LM = C3 >2 AND C3 <6: ON C3 GOSUB 1000,740,1260,2200,3100,3000
16260 RETURN
16500 ONERR GOTO 16700
16505 DIM Q(84),Q$(50),OP(25),OP$(25),TY(25)
16510 PRINT CHR$(4)"OPENCONFIGURATION": PRINT CHR$(4)"READCONFIGURATION": FOR I = 1 TO 84: INPUT Q(I): NEXT : IF Q(31) <Q(8) THEN Q(31) = 30
16520 FOR I = 1 TO 50
16522 J = 0: GET A$: IF A$ = CHR$(127) THEN A$ = CHR$(0)
16523 IF A$ = CHR$(126) THEN A$ = CHR$(13):J = 1
16525 IF A$ < > CHR$(13) OR J = 1 THEN Q$(I) = Q$(I) +A$: GOTO 16522
16527 NEXT :A = VAL(Q$(28)):RN$ = "RN": IF A >0 THEN RN$ = MID$ (Q$(28),2,A): IF RN$ = "" THEN RN$ = "RN"
16530 FOR I = 1 TO 15: INPUT OP(24): NEXT : INPUT A: INPUT A
16535 INPUT OP(1): INPUT OP(2): FOR I = 1 TO 8: INPUT A: NEXT : INPUT OP(4): INPUT OP(3): INPUT A: INPUT A: INPUT OP(17): INPUT A: INPUT OP(23): FOR I = 1 TO 63: INPUT A: NEXT
16540 FOR I = 5 TO 13: INPUT OP(I): NEXT : INPUT OP(15): INPUT OP(21): INPUT OP(14): INPUT OP(19): INPUT OP(20): INPUT OP(22)
18040 PRINT CHR$(4)"READ"PF$"FRWHERE": INPUT L: INPUT WH$(MP):WH(MP,0) = -3: IF L > -1 THEN WH(MP,0) = -L
18045 IF L < >0 THEN PRINT CHR$(4): GOTO 18035
18047 ONERR GOTO 18250
18050 INPUT A: INPUT II: PRINT CHR$(4)"OPEN"WH$(MP)"FILE.NUMB": PRINT CHR$(4)"READ"WH$(MP)"FILE.NUMB": INPUT JJ: IF JJ <1 THEN 18065
18055 KK = MP: INPUT WH(MP,4):WH(MP,0) = (WH(MP,4) -1) *ND: IF JJ <2 THEN 18065
18060 FOR P = 2 TO JJ:MP = MP +1:WH$(MP) = WH$(KK):WH(MP,1) = I:WH(MP,2) = ME(I,2):WH(MP,3) = ME(I,3): INPUT WH(MP,4):WH(MP,0) = (WH(MP,4) -1) *ND: NEXT
18065 PRINT CHR$(4)"CLOSE"WH$(MP)"FILE.NUMB": IF II < >ND THEN PRINT "DATA IN DRIVE "I", DIRECTORY "WH$(MP);: GOSUB 860: PRINT "DOESN'T MATCH THE CONFIGURATION FILE.":CC = 1
18066 IF JJ <1 THEN MP = MP -1
18070 GOTO 18035
18080 IF CC THEN PRINT : PRINT "CONTINUING WOULD ENDANGER YOUR DATA.": PRINT : PRINT "BYE..": END
18085 IF MP <1 THEN PRINT "NO DISK DRIVES COULD BE READ SUCCESSFULLY.";: GOSUB 690
18090 POKE 216,0: RETURN
18200 PRINT CHR$(4)"CLOSE"PF$"FRWHERE": POKE 216,0:A = PEEK(222): IF A < >5 AND A < >6 THEN 16720